/**
 *  面向对象三大特性：继承、封装、多态
 *
 *  new 操作符通常做以下这几件事情,
 *  1. 创建一个空对象
 *  2. 将该对象的原型指向构造函数的prototype
 *  3. 执行构造函数，并将this绑定到新创建的对象
 *  4. 如果构造函数没有显示的返回对象，则默认返回新创建的对象
 *
 *  类
 *  1.类本质上还是函数，但是没有函数提升，且只能通过new关键字调用（普通函数既可以通过new关键字调用也可以普通调用）
 *  2.当我们使用new调用一个类时候，默认会调用类的构造函数（constructor)
 *  3.一个类只能有一个constructor
 *  4.类只能通过new关键字调用
 *  5.类属性是指实例属性，而静态方法才是类本身的属性，通过类才能访问。同理静态方法和类方法类似
 * */


// function People(name, age) {
//   this.name = name
//   this.age = age
// }
//
// People.prototype.say = function () {
//   console.log('我是' + this.name + '，今年' + this.age + '岁了。')
// }
//
// const p = new People('张三', 18)
// p.say()
//


class People {
  constructor(name, age) {
    this.name = name
    this.age = age
  }

  say() {
    console.log('我是' + this.name + ',今年' + this.age + '岁了。')
  }

  static say() {
    console.log('People say')
  }
}

People.say()
// const p = new People('张三', 18)


